From 78f356465321b55fed86868e380dc73d45401e1b Mon Sep 17 00:00:00 2001 From: Eh2406 Date: Wed, 24 Jan 2018 16:17:33 -0500 Subject: [PATCH] add the Manifest links attribute to Summary --- src/cargo/core/summary.rs | 14 ++++++++++---- src/cargo/sources/registry/index.rs | 4 ++-- src/cargo/sources/registry/mod.rs | 2 ++ src/cargo/util/toml/mod.rs | 2 +- tests/resolve.rs | 10 +++++----- 5 files changed, 20 insertions(+), 12 deletions(-) diff --git a/src/cargo/core/summary.rs b/src/cargo/core/summary.rs index 734f73bd6..81bb5c3d6 100644 --- a/src/cargo/core/summary.rs +++ b/src/cargo/core/summary.rs @@ -22,12 +22,14 @@ struct Inner { dependencies: Vec, features: BTreeMap>, checksum: Option, + links: Option, } impl Summary { pub fn new(pkg_id: PackageId, dependencies: Vec, - features: BTreeMap>) -> CargoResult { + features: BTreeMap>, + links: Option) -> CargoResult { for dep in dependencies.iter() { if features.get(dep.name()).is_some() { bail!("Features and dependencies cannot have the \ @@ -66,9 +68,10 @@ impl Summary { Ok(Summary { inner: Rc::new(Inner { package_id: pkg_id, - dependencies: dependencies, - features: features, + dependencies, + features, checksum: None, + links, }), }) } @@ -82,6 +85,9 @@ impl Summary { pub fn checksum(&self) -> Option<&str> { self.inner.checksum.as_ref().map(|s| &s[..]) } + pub fn links(&self) -> Option<&str> { + self.inner.links.as_ref().map(|s| &s[..]) + } pub fn override_id(mut self, id: PackageId) -> Summary { Rc::make_mut(&mut self.inner).package_id = id; @@ -94,7 +100,7 @@ impl Summary { } pub fn map_dependencies(mut self, f: F) -> Summary - where F: FnMut(Dependency) -> Dependency { + where F: FnMut(Dependency) -> Dependency { { let slot = &mut Rc::make_mut(&mut self.inner).dependencies; let deps = mem::replace(slot, Vec::new()); diff --git a/src/cargo/sources/registry/index.rs b/src/cargo/sources/registry/index.rs index f2e993244..053775d4d 100644 --- a/src/cargo/sources/registry/index.rs +++ b/src/cargo/sources/registry/index.rs @@ -146,12 +146,12 @@ impl<'cfg> RegistryIndex<'cfg> { fn parse_registry_package(&mut self, line: &str) -> CargoResult<(Summary, bool)> { let RegistryPackage { - name, vers, cksum, deps, features, yanked + name, vers, cksum, deps, features, yanked, links } = super::DEFAULT_ID.set(&self.source_id, || { serde_json::from_str::(line) })?; let pkgid = PackageId::new(&name, &vers, &self.source_id)?; - let summary = Summary::new(pkgid, deps.inner, features)?; + let summary = Summary::new(pkgid, deps.inner, features, links)?; let summary = summary.set_checksum(cksum.clone()); if self.hashes.contains_key(&name[..]) { self.hashes.get_mut(&name[..]).unwrap().insert(vers, cksum); diff --git a/src/cargo/sources/registry/mod.rs b/src/cargo/sources/registry/mod.rs index 3ef6e67fd..e7edf91f1 100644 --- a/src/cargo/sources/registry/mod.rs +++ b/src/cargo/sources/registry/mod.rs @@ -220,6 +220,8 @@ struct RegistryPackage<'a> { features: BTreeMap>, cksum: String, yanked: Option, + #[serde(default)] + links: Option, } struct DependencyList { diff --git a/src/cargo/util/toml/mod.rs b/src/cargo/util/toml/mod.rs index f73790941..fddd6ccd3 100644 --- a/src/cargo/util/toml/mod.rs +++ b/src/cargo/util/toml/mod.rs @@ -672,7 +672,7 @@ impl TomlManifest { let include = project.include.clone().unwrap_or_default(); let summary = Summary::new(pkgid, deps, me.features.clone() - .unwrap_or_else(BTreeMap::new))?; + .unwrap_or_else(BTreeMap::new), project.links.clone())?; let metadata = ManifestMetadata { description: project.description.clone(), homepage: project.homepage.clone(), diff --git a/tests/resolve.rs b/tests/resolve.rs index 42a67dd37..aa89d59da 100644 --- a/tests/resolve.rs +++ b/tests/resolve.rs @@ -32,7 +32,7 @@ fn resolve(pkg: &PackageId, deps: Vec, registry: &[Summary]) fn requires_precise(&self) -> bool { false } } let mut registry = MyRegistry(registry); - let summary = Summary::new(pkg.clone(), deps, BTreeMap::new()).unwrap(); + let summary = Summary::new(pkg.clone(), deps, BTreeMap::new(), None).unwrap(); let method = Method::Everything; let resolve = resolver::resolve(&[(summary, method)], &[], &mut registry, None, false)?; let res = resolve.iter().cloned().collect(); @@ -78,11 +78,11 @@ macro_rules! pkg { ($pkgid:expr => [$($deps:expr),+]) => ({ let d: Vec = vec![$($deps.to_dep()),+]; - Summary::new($pkgid.to_pkgid(), d, BTreeMap::new()).unwrap() + Summary::new($pkgid.to_pkgid(), d, BTreeMap::new(), None).unwrap() }); ($pkgid:expr) => ( - Summary::new($pkgid.to_pkgid(), Vec::new(), BTreeMap::new()).unwrap() + Summary::new($pkgid.to_pkgid(), Vec::new(), BTreeMap::new(), None).unwrap() ) } @@ -92,7 +92,7 @@ fn registry_loc() -> SourceId { } fn pkg(name: &str) -> Summary { - Summary::new(pkg_id(name), Vec::new(), BTreeMap::new()).unwrap() + Summary::new(pkg_id(name), Vec::new(), BTreeMap::new(), None).unwrap() } fn pkg_id(name: &str) -> PackageId { @@ -108,7 +108,7 @@ fn pkg_id_loc(name: &str, loc: &str) -> PackageId { } fn pkg_loc(name: &str, loc: &str) -> Summary { - Summary::new(pkg_id_loc(name, loc), Vec::new(), BTreeMap::new()).unwrap() + Summary::new(pkg_id_loc(name, loc), Vec::new(), BTreeMap::new(), None).unwrap() } fn dep(name: &str) -> Dependency { dep_req(name, "1.0.0") } -- 2.30.2